<?php
/***************************************************************************
 *   Copyright (C) 2007 by Andrea Blankenstijn, David Dieulivol            *
 *   darkan9el@gmail.com, daviddieulivol5@hotmail.com                      *
 *                                                                         *
 *   All rights reserved.                                                  *
 *   This work is released under the terms of the New BSD License.         *
 *   See LICENSE.BSD file for licensing details                            *
 ***************************************************************************/
/* * *
 * $Id: gallery.class.php 53 2007-10-18 19:17:41Z DarkAn9el $
 * * */

/**
 * \class Gallery
 * \version $Revision: 53 $
 * \date $Date: 2007-10-18 19:17:41 +0000 (Thu, 18 Oct 2007) $
 * \author Andrea Blankenstijn
 * \author David Dieulivol
 * \brief Classe d'accès aux données des galeries d'images
 */

class Gallery
{
	private $creationDate;      ///< date de création de la galerie
	private $description;       ///< description de la galerie
	private $id;                ///< identifiant de la galerie
	private $idPhotos;          ///< tableau d'identifiants des photos de la galerie
	private $isOnline;          ///< galerie visible par le public
	private $name;              ///< nom de la galerie
	private $pdoProxy;          ///< instance de PdoProxy
	private $tGalleries;        ///< nom de la table galleries avec préfix
	private $tPhotos2Galleries; ///< nom de la table photos2galleries avec préfix

	/**
	 * \brief Retourne un tableau de toutes les galeries.
	 *
	 * Retourne un tableau contenant toutes les informations des galeries.
	 * Remarque: aucun champ n'est traité avec stripslashes, cela peut-être nécessaire
	 * pour name et description.
	 * \param[in] $dbh instance PdoProxy
	 * \param[in] $onlineOnly ne retourner que les galeries en ligne
	 * \param[in] $sortCol champs utilisé pour ordrer le jeu de résultats (int)
	 *   - 0 → par ID
	 *   - 1 → par nom
	 *   - 2 → par description
	 *   - 3 → par date de création
	 * \param[in] $limit limiter le nombre de résultats retournés (SQL: LIMIT) (int)
	 * \param[in] $offset ignorer les X premiers résultats (SQL: OFFSET) (int)
	 * \return tableau associatif des galeries sélectionnées
	 * \return FALSE si la requête n'a retourné aucun résultat
	 */
	public static function listGalleries(PdoProxy $dbh, $onlineOnly = TRUE, $sortCol = 0, $limit = null, $offset = null)
	{
		$tGalleries = $dbh->getPrefix() .'galleries';

		$limit      = NULL;
		$order      = NULL;
		$where      = NULL;

		// Close WHERE
		if($onlineOnly)
			$where = 'WHERE `isOnline`=1';

		// Close ORDER BY
		if(is_int($sortCol))
		{
			$columns = array('`idGalleries`', '`name`', '`description`', '`creationDate`');
			$order   = 'ORDER BY '. $columns[$sortCol];
		}

		// Close LIMIT/OFFSET
		if(is_int($limit))
		{
			$limit = 'LIMIT '. $limit;
			if(is_int($offset))
				$limit .= ' OFFSET '. $offset;
		}

		if($query  = $dbh->query('SELECT * FROM `'.$tGalleries.'` '.$where.' '.$order.' '.$limit.';'))
			return $query->fetchAll(PDO::FETCH_ASSOC);
		else
			return FALSE;
	}

	/**
	 * \brief Constructeur de la classe. Charge les données d'une
	 * galerie si l'on passe son identifiant comme second argument.
	 * \param[in] $dbh instance PDO
	 * \param[in] $idGallery identifiant de la galerie à charger
	 * \see load
	 */
	public function __construct(PdoProxy $dbh, $idGallery = NULL)
	{
		$this->pdoProxy          = $dbh;
		$this->tGalleries        = $dbh->getPrefix() .'galleries';
		$this->tPhotos2Galleries = $dbh->getPrefix() .'photos2galleries';

		if(!empty($idGallery))
			$this->load($idGallery);
	}

	/**
	 * \brief Méthode d'accès à l'attribut creationDate.
	 * \return date de création de la galerie
	 */
	public function getCreationDate()
	{
		return $this->creationDate;
	}

	/**
	 * \brief Méthode d'accès à l'attribut description.
	 * \return description de la galerie
	 */
	public function getDescription()
	{
		return $this->description;
	}

	/**
	 * \brief Méthode d'accès à l'attribut name.
	 * \return nom de la galerie
	 */
	public function getName()
	{
		return $this->name;
	}

	/**
	 * \brief Méthode d'accès à l'attribut idPhotos.
	 * \return tableau d'identifiants des photos de la galerie
	 * \return FALSE si galerie sans photo
	 */
	public function getIdPhotos()
	{
		if(!empty($this->idPhotos))
		{
			return $this->idPhotos;
		}
		else
			return FALSE;
	}

	/**
	 * \brief Charge la galerie ayant l'identifiant passé en argument.
	 * \param[in] $id identifiant de la galerie
	 * \exception Exception la requête n'a renvoyé aucun résultat
	 */
	public function load($id)
	{
		$infoGallery = $this->pdoProxy->prepare('SELECT * FROM `'.$this->tGalleries.'` WHERE `idGalleries` = :id;');
		$infoGallery->bindValue(':id', $id, PDO::PARAM_INT);
		$infoGallery->execute();

		if($row = $infoGallery->fetch())
		{
			$this->id           = $id;
			$this->name         = stripslashes($row['name']);
			$this->description  = stripslashes($row['description']);
			$this->creationDate = $row['creationDate'];
			$this->isOnline     = $row['isOnline'];
		}
		else
			throw new Exception('La galerie '. $id .' n\'a pas pu être chargée');

		// Chargement des IDs des photos de la galerie
		$photosIds = $this->pdoProxy->prepare('SELECT `idPhotos` FROM `'.$this->tPhotos2Galleries.'` WHERE `idGalleries` = :id;');
		$photosIds->bindValue(':id', $this->id, PDO::PARAM_INT);
		$photosIds->execute(array($this->id));

		while($row = $photosIds->fetch())
		{
			$this->idPhotos[]   = $row['idPhotos'];
		}
	}
}
?>
